#include <gtk/gtk.h>
void
destroy_cb(GtkWidget *widget,gpointer data) {
	gtk_main_quit();
}
gboolean
leave_cb(GtkWidget *widget,GdkEvent *ev,gpointer data) {
	g_debug("leave_cb\n");
	return TRUE;
}
gboolean
enter_cb(GtkWidget *widget,GdkEvent *ev,gpointer data) {
	g_debug("enter_cb\n");
	return TRUE;
}

int main(int argc,char *argv[]) {
	GtkWidget *window;
	GtkWidget *frame;
	GtkWidget *label;
	GtkWidget *evbox;
	
	gtk_init(&argc,&argv);
	
	window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
	evbox=gtk_event_box_new();
	frame=gtk_frame_new("frame");
	label=gtk_label_new("label");

	g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(destroy_cb),NULL);
	
	// если тут заменить evbox на frame (как по логике и должно быть)
	// работать не будет.
	gtk_widget_add_events(evbox,GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK);
	g_signal_connect(G_OBJECT(evbox),"leave-notify-event",G_CALLBACK(leave_cb),NULL);
	g_signal_connect(G_OBJECT(evbox),"enter-notify-event",G_CALLBACK(enter_cb),NULL);

	gtk_container_add(GTK_CONTAINER(window),evbox);
	gtk_container_add(GTK_CONTAINER(evbox),frame);
	gtk_container_add(GTK_CONTAINER(frame),label);
	
	gtk_widget_show_all(window);

	gtk_main();
	
	return 0;
}

